package tag40_04_09.threadsWeiter;

public class Th21_volatile {

	static long var;
	
	public static void main(String[] args) {

		new Thread(){
			@Override
			public void run() {
				var = Long.MAX_VALUE; //0111111111111111111111111111111111111111111111111111111111111111
			}
			
		}.start();
		
		// var am Anfang:
		//63       32  31        0
		//|         |   |        |
		//000.....000-000......000
		
		//Long.MAX_VALUE:
		//63       32  31        0
		//|         |   |        |
		//0111....111-111111111111
		// wird in var in 2 Schritten geschrieben:

		// 1. die Bits 0 bis 31 speichern:
		//var nach dem Schritt 1:
		//63      32 31       0
		//|        | |        |
		//000....000-111....111 // Das Schreiben kann hier angehalten werden, 
								// wenn var nicht volatile ist
		
		// 2. die Bits 32 bis 64 speichern:
		//var nach dem Schritt 1:
		//63      32 31       0
		//|        | |        |
		//011....111-111....111 
		
		if(var == 0){
			System.out.println( "der main war Schneller" );	
		}else if(var == Long.MAX_VALUE){ 
			System.out.println( "der main war zu Langsam" );
		}else{
			System.out.println( "Eine andere Situation?" );
		}
		
		
	}

}
